package main

import (
	"fmt"
	"reflect"
)

func MyCall(f func(a, b int)int) {
	fV := reflect.TypeOf(f)
	if fV.Kind() != reflect.Func {
		return
	}
	args := make([]reflect.Value, 2)
	args[0] = reflect.ValueOf(1)
	args[1] = reflect.ValueOf(2)
	res := reflect.ValueOf(f).Call(args)
	fmt.Println(res[0].Interface().(int))
}

func Add1(a, b int) int {
	return a + b
}

func Add2(a, b int) int {
	return a - b
}

func main() {
	MyCall(Add1)
	MyCall(Add2)
}
